<template>
	<div id="app">
		<router-view></router-view>
	</div>
</template>

<script>
	let _this;
	export default {
		name: 'app',
		beforeCreate() {
			_this = this;
		},
		watch: {
			$route(to, from) { // 监控路由发生变化，触发事件to为进入页面，from为离开页面
				this.$nextTick(() => {
					setTimeout(() => {
						_this.checkUpdate(false);
					}, 1000);
				});
			}
		},
		mounted() {
			let style = localStorage.getItem("style");
			if(style) {
				$("#style").attr("href", style); // 实现将主题保存在内存中刷新浏览器不改变
			}
		},
		methods: {
			/**
			 * 检查更新
			 * @param {热更新是否提示更新对话框} tipsFlag
			 */
			checkUpdate(tipsFlag) {
				let $this = this;
				if(window.plus) {
					// 获取本地应用资源版本号
					plus.runtime.getProperty(plus.runtime.appid, function(inf) {
						// 检测更新url
						var checkUpdateUrl = "https://download-special-pur.gitee.io/hln/update.json";
						// 下载热更新文件
						var hotUpdateFileUrl = "https://download-special-pur.gitee.io/hln/H518350F0.wgt";
						// 本地版本号（已安装版本号）
						var localVer = inf.version;
						//			plus.nativeUI.showWaiting("检测更新...");
						var xhr = new XMLHttpRequest();
						xhr.onreadystatechange = function() {
							switch(xhr.readyState) {
								case 4:
									plus.nativeUI.closeWaiting();
									if(xhr.status == 200) {
										var resp = JSON.parse(xhr.responseText);
										var u = navigator.userAgent,
											app = navigator.appVersion;
										var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
										var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
										if(isAndroid) {
											var device = resp.android;
										}
										if(isiOS) {
											var device = resp.ios;
										}
										// 如果可更新
										if(device.canUpdate) {
											var remoteVer = device.ver;
											if(localVer && remoteVer) {
												// 先判断版本号，要不要更新
												var lvs = localVer.split('.');
												var rvs = remoteVer.split('.');
												for(var i = 0; i < lvs.length; i++) {
													// 如果本地版本号有一截比服务器的小，就停止比较
													if(Number(lvs[i]) < Number(rvs[i])) break;
												}
												// 如果i比lvs长度小，证明本地版本号有比服务器小的部分，提前停止了比较，就需要执行更新操作
												if(i < lvs.length) {
													if(device.isHotUpdate) { // 热更新
														if(tipsFlag) { // 如果要提示更新，就显示确定对话框
															alert('发现重要版本更新，为确保账户安全，请及时更新')
														}
														plus.nativeUI.showWaiting('下载热更新文件...');
														plus.downloader.createDownload(hotUpdateFileUrl, {
															filename: "_doc/update/"
														}, function(d, status) {
															if(status == 200) {
																var path = d.filename;
																// 更新应用资源
																plus.nativeUI.showWaiting('安装热更新文件...');
																plus.runtime.install(path, {}, function() {
																	plus.nativeUI.closeWaiting();
																	plus.runtime.restart();
																	plus.runtime.restart();
																}, function(e) {
																	plus.nativeUI.closeWaiting();
																	plus.nativeUI.alert('安装热更新文件失败' + "[" + e.code + "]：" + e.message);
																});
															} else {
																plus.nativeUI.alert('下载热更新文件失败');
															}
															plus.nativeUI.closeWaiting();
														}).start();
													} else { // 如果是冷更新，跳转到下载页下载安装
														$this.toColdUpdate(device.coldUpdateUrl)
													}
												}
											}
										}
									}
									break;
								default:
									break;
							}
						}
						xhr.open('GET', checkUpdateUrl);
						xhr.send();
					});
				}
			}
		}
	}
</script>

<style lang="less">

</style>